﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;

namespace TrabalhoSeven{
    abstract class Sprite{
		protected Texture2D textura;
		protected Vector2 posicao;
		public Vector2 Posicao {
			get {
				return posicao;
			}
			set {
				posicao = value;
			}
		}
		protected Vector2 velocidade;
		public Vector2 Velocidade {
			get {
				return velocidade;
			}
		}
		protected Vector2 pivo;
		protected Rectangle hitbox;
		public Rectangle Hitbox {
			get {
				return hitbox;
			}
		}
		protected float rotacao; // MathHelper.ToRadians(0);
		protected bool direita;
		public bool Direita {
			get {
				return direita;
			}
		}
		protected bool visivel;
		protected float[] corRGB;
		protected float alfa;
		protected float camada;
		public struct animacao{
			public int quadro_X;
			public int quadro_Y;
			public int qtd_quadros;
			public int quadros_seg;
			public int Y;
			public string nome;
			public bool ativa;
			public int quadro_atual;
		}

		public Sprite(Texture2D textura) {
			this.textura = textura;
			this.posicao = new Vector2(0, 0);
			this.velocidade = new Vector2(1, 1);
			this.hitbox = new Rectangle(0, 0, 52, 44);
			this.rotacao = 0;
			this.pivo = Vector2.Zero; //o que eh pivo?
			this.direita = true;
			this.visivel = true;
			this.camada = 1.0f;
			this.alfa = 1.0f;
			this.corRGB = new float[3]; this.corRGB[0] = this.corRGB[1] = this.corRGB[2] = 1.0f;
		}

		public abstract void Update(GameTime gameTime);

		public void Draw(GameTime gameTime, SpriteBatch spriteBatch, animacao anim) {
			if (visivel == true) {
				int frame = (int)((gameTime.TotalGameTime.TotalSeconds * anim.quadros_seg) % anim.qtd_quadros);

				 spriteBatch.Draw(
					textura,
					new Rectangle((int)posicao.X, (int)posicao.Y, anim.quadro_X, anim.quadro_Y),
					new Rectangle(frame * anim.quadro_X, anim.Y, anim.quadro_X, anim.quadro_Y),
					new Color(corRGB[0] * alfa, corRGB[1] * alfa, corRGB[2] * alfa, alfa),
					rotacao,
					pivo,
					direita ? SpriteEffects.None : SpriteEffects.FlipHorizontally,
					camada	
				);
			}
		}
    }
}
